#include <header.h>
#include <zemaphore.h>


/**
 * 现在有两个线程t1和t2，t1 打印 A 和 C，t2 打印 B。
 * 书写代码，使用条件变量每次的显示顺序都是A->B->C。
 * 代码书写完成后，回答问题：条件变量中加锁的目的是什么？
*/
zem_t zem_1, zem_2;

void *run1(void *arg){
	printf("A\n");
	// V(zem_1)
	zem_post(&zem_1);
	// P(zem_2)
	zem_wait(&zem_2);
	printf("C\n");
	return NULL;

}


void *run2(void *arg){
	// P(zem_1)
	zem_wait(&zem_1);
	printf("B\n");
	// V(zem_2)
	zem_post(&zem_2);
	return NULL;
}


int main(int argc, char* argv[]){
	zem_init(&zem_1, 0);
	zem_init(&zem_2, 0);

	pthread_t thread1, thread2;
	pthread_create(&thread1, NULL, run1, NULL);
	pthread_create(&thread2, NULL, run2, NULL);

	pthread_join(thread1, NULL);
	pthread_join(thread2, NULL);
	zem_destory(&zem_1);
	zem_destory(&zem_2);
	return 0;
}